import { Provide, Scope, ScopeEnum } from '@midwayjs/core';
import { Repository } from 'typeorm';
import { InjectEntityModel } from '@midwayjs/typeorm';
import { User } from '../entity/User';

@Provide()
@Scope(ScopeEnum.Request, { allowDowngrade: true })
export class UserDao {
    // 注入User实体的Repository
    @InjectEntityModel(User)
    userModel: Repository<User>;

    // 根据用户ID获取用户信息（不包含密码）
    async getUserById(id: string): Promise<User | null> {
        return await this.userModel.findOne({
            where: { id },
            select: ['id', 'account', 'name', 'email', 'phone', 'gender', 'identity']
        });
    }

    // 更新用户信息
    async updateUserInfo(id: string, updateData: Partial<User>): Promise<User | null> {
        // 执行更新操作
        await this.userModel.update(id, updateData);
        
        // 返回更新后的用户信息
        return await this.getUserById(id);
    }

    // 检查邮箱是否被其他用户使用
    async checkEmailExistsForOtherUser(email: string, currentUserId: string): Promise<boolean> {
        const user = await this.userModel.findOne({
            where: { email }
        });
        // 如果找到用户且不是当前用户，则邮箱已被使用
        return !!user && user.id !== currentUserId;
    }

    // 检查手机号是否被其他用户使用
    async checkPhoneExistsForOtherUser(phone: string, currentUserId: string): Promise<boolean> {
        const user = await this.userModel.findOne({
            where: { phone }
        });
        // 如果找到用户且不是当前用户，则手机号已被使用
        return !!user && user.id !== currentUserId;
    }
}